package reflect.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * java提供了元注解
 * 常见的：
 * @Target:用于标注当前注解可以被应用的位置
 *         值的选取在ElementType中进行了规定
 *         TYPE:只能在类上被应用
 *         CONSTRUCTOR:只能在构造器上被应用
 *         METHOD:只能在方法上被应用
 *         FIELD:只能在属性上被应用
 *         ...
 *
 *         例如:
 *         @Target(ElementType.TYPE)  当前注解只能在类上使用
 *
 *         当指定多个位置时，要以数组形式传入
 *         @Target({ElementType.TYPE,ElementType.FIELD}) 可被应用在类上或属性上
 *
 * @Retention:保留级别，可以指定的值:
 *      RetentionPolicy.SOURCE:注解保留在源代码中，编译后的字节码文件中没有了
 *      RetentionPolicy.CLASS:保留在字节码文件中，但是不可被反射机制访问(默认保留级别)
 *      RetentionPolicy.RUNTIME:保留在运行期(字节码文件中保留)，但是可被反射机制访问
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoRunClass {
}
